import { Controller, Body, Get, Delete, Param, Post, Query, DefaultValuePipe, ParseIntPipe, UploadedFile, UseInterceptors } from '@nestjs/common';
import { DesignService, PaginatedDesignPages, PaginatedPages, PaginatedDesignBanners } from './design.service';
import { FileInterceptor } from '@nestjs/platform-express';

@Controller('design')
export class DesignController {
  constructor(
    private readonly designService: DesignService,
  ) { }

  // 保存接口（后台管理调用）
  @Post('save')
  async save(@Body() body: { title: string; content: string }) {
    return this.designService.saveContent(body.title, body.content);
  }

  // 获取所有文章（后台管理调用）
  @Get('pages/all')
  async getAllPages(
    @Query('page', new DefaultValuePipe(1), ParseIntPipe) page: number = 1,
    @Query('limit', new DefaultValuePipe(10), ParseIntPipe) limit: number = 10,
  ): Promise<PaginatedPages> {
    // return this.designService.getAllPages();
    // 限制每页最大数量（可选）
    limit = Math.min(limit, 100);
    return this.designService.getAllPages(page, limit);
  }

  // 获取可见文章
  @Get('pages')
  async getVisiblelPages() {
    return this.designService.getVisiblelPages();
  }

  // 获取单个文章内容（前端网页调用）
  @Get('page/:id')
  async getPageById(@Param('id') id: number) {
    return this.designService.getPageById(id);
  }

  // 百分比保存
  @Post('/page/percentage')
  async savePercentage(@Body() body: { id: number, percentage: number }) {
    return this.designService.savePercentage(body.id, body.percentage);
  }

  // 切换显示状态（后台）
  @Post('/toggle-visibility')
  async toggleVisibility(@Body() body: { id: number, visible: boolean }) {
    // console.log(body.id, body.visible, 'body.id, body.visible==');
    return this.designService.toggleVisibility(body.id, body.visible);
  }


  // 删除
  @Delete('/page/delete/:id')
  async deletePage(@Param('id') id: number): Promise<void> {
    return this.designService.deletePage(id);
  }

  // 查询文章-根据类别id获取所有
  // /design/category/1?page=2&limit=5
  @Get('category/:categoryId')  // 获取某类别的页面列表（分页）
  async getByCategory(
    @Param('categoryId') categoryId: number,
    @Query('page') page: number = 1, // 动态接收 page（默认值1）
    @Query('limit') limit: number = 10, // 动态接收 limit（默认值10）
  ): Promise<PaginatedDesignPages> {  // 显式声明返回类型
    return this.designService.getPagesByCategory(categoryId, page, limit);
  }

  // 富文本创建文章
  /* 
参数名	类型	是否必填	说明
title	string	是	设计页面的标题（如"首页设计"）
content	string	是	富文本内容（HTML格式）
categoryId	number	是	关联的分类ID（如UI设计分类ID=1）
coverImg	string	否	封面图片URL（可选）
summary	string	否	简短描述（用于卡片展示，可选）
   */
  @Post()
  async createPage(
    @Body('title') title: string,
    @Body('content') content: string,
    @Body('category_id') category_id: number,
    @Body('cover_img') cover_img?: string,
    @Body('cover_images') cover_images?: any,
    @Body('is_visible') is_visible?: any,
    @Body('summary') summary?: string,
  ) {
    return this.designService.createPage(
      title,
      content,
      category_id,
      cover_img,
      cover_images,
      is_visible,
      summary,
    );
  }

  // 修改文章
  @Post('/page/update')
  async updatePage(
    @Body()
    updates: {
      id: number;
      title: string;
      content: string;
      category_id: number;
      cover_img?: string;
      cover_images?: any;
      is_visible?: any;
      summary?: string;
    },
  ) {
    return this.designService.updatePage(
      updates.id, updates
    );
  }

}
